Go internet with usb0 on BeagleBone Black

前情提要

之前在北科大使用 BeagleBone Black (BBB) 講課時遇到一個狀況,學校的電腦教室雖說每一台都配發有獨立的 Public IP(真的是很牛的學校,在如今 Public IP 短缺的時代,連電腦教室裡的每台電腦都可以有自己的 Public IP),但這些 IP 仍被學校網管單位限定以 MAC address 所綁定,因此學生們使用的 BBB 無法藉由這些 Public IP 上到 Internet。

後來觀察到電腦教室內的電腦竟然安裝有二張網卡,於是我們想出了一種讓可上 Internet 的網卡開啟網路分享功能讓另一個網卡可以上網,再將 BBB 接至該網卡上完成設定的工作。

但還是需要請系上或學生們自帶一條網路線,著實不便。後來想想既然我們可以使用 USB 線透過 ssh 連線到 BBB 上,那也許 BBB 也可以透過 USB 線上網。

基於上述的想法,我們開始進行一些嘗試…

設定網路分享

成功安裝 BBB 的驅動程式及連接 BBB USB 線之後,電腦上可以成功偵測出一張新的網卡,也因為這張網卡,我們可以透過 ssh 192.168.7.2 的方式遠端連線至 BBB 上。

我們現在需要將原本可以上網的網卡 Local Area Connection,並且設定成讓 BBB 的網卡 Local Area Connection 2 可以透過這張網卡上網。

  • 在 Windows 電腦中,選擇 控制台 >> 網路和網際網路 >> 網路和共用中心 >> 變更介面卡
    變更介面卡
  • 找到原本上網的網路卡 Local Area Connection,並設定成可使用該網卡進行上網。
    開啟網路分享
  • 由於 Windows 會強制將被分享上網的網卡變更為一個特定的固定 IP,所以原本 BBB 所屬的網路卡 Local Area Connection 2 IP 會被修改,為了之後可以連線至 BBB,所以我們將 BBB 所屬網卡再手動改回至 DHCP 取得 IP。
    變更 IP 設定

完成這個步驟後,基本上 Local Area Connection 2 便可以透過 Local Area Connection 上外網了。

設定 Routing Table

接著回到 BBB 上,既然在 Windows 上已經完成網路分享的設定,那麼在 BBB 上應該就可以透過 USB 介面上網才是,現在唯一要做的就是更改 Routing Table,並將 Default Gateway 設定在 usb0 這個介面上。

1
root@beaglebone:~# route add default gw 192.168.7.1

完成之後,我們印出 routing table 再確認一次。

1
2
3
4
5
root@beaglebone:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.7.1 0.0.0.0 UG 0 0 0 usb0
192.168.7.0 * 255.255.255.0 U 0 0 0 usb0

接下來我們嘗試對外 ping 看看。

1
2
3
4
5
6
root@beaglebone:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=64 time=24.247 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=64 time=25.192 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=64 time=24.142 ms
64 bytes from 8.8.8.8: icmp_req=4 ttl=64 time=23.232 ms

設定 name server

最後我們仍必須加入 dns server 設定,否則將無法解析 domain name。

1
root@beaglebone:~# echo 'nameserver 8.8.8.8' > /etc/resolv.conf
1
2
3
4
5
6
root@beaglebone:~# ping google.com
PING google.com (173.194.72.101): 56 data bytes
64 bytes from 173.194.72.101: icmp_seq=0 ttl=48 time=27.214 ms
64 bytes from 173.194.72.101: icmp_seq=1 ttl=48 time=26.654 ms
64 bytes from 173.194.72.101: icmp_seq=2 ttl=48 time=27.766 ms
64 bytes from 173.194.72.101: icmp_seq=3 ttl=48 time=26.758 ms